https://linen.dev logo
指定数字の中から判別するjava構文を探しています
# forum
r
停車駅を自動判別する構文を書いているのですが、現状だと 各駅を関数stationにて一直線の数値に再指定したうえで通過種別と範囲のみを抽出し、各種別ごとに数値の判定を行い通過駅だとその数値をスキップするという構文なのですが、そのうち停車駅リストの部分の構文をもっと簡略化したいと考えています。 現状の構文を砕いた形で書かせていただきます。
Copy code
1,通過駅範囲の指定,種別の判定
IF((station >= 1 && station <= 21)||syubethu > 1){

2,後述の通過駅判定後の処理(中身は中略)
var stopthink = checkStopthink(station, syubethu);
if (stopthink === true) {
//通過駅の動作
}else if (stopthink === false){
//通過駅じゃないときの動作
}

3,各種別ごとの通過駅判定(ここを簡略化したい)
function checkStopthink(station, syubethu) {
if (syubethu === 2) {
            return station <= 5 ||station ===8 ||station === 9||station === 15|| station >= 21;
        }
if (syubethu === 3) {
            return station <= 5 ||station === 15|| station >= 21;
        }
if (syubethu === 4) {
            return station = 1 || station = 3 || station = 5 ||station === 15|| station >= 21;
        }
}
主に3番のreturn構文にて停車駅を一つ一つstation = 3 のような形で書かなければならないところが文が長大になってしまうので{1,3,5,6,7}のように数字だけで完結するような構文にしたいと考えているのですが、当方技術不足によりchatGPTを使用してもいい結果が返ってこなかったため質問をさせていただいた次第です。  このような種別ごとの停車駅番号リストに当てはまるかどうかを判別する構文をもっと簡略化できる方法を知っている方いらっしゃいましたらご伝授いただきたく存じます。何卒宜しくお願い致します。 追記:スクリプト部分なんか黒幕かかっちゃって治し方わからないんでお手数ですが外しながらご覧いただければ幸いです…
p
return station = 21 というのは何を表していますか?
t
本筋からは逸れてしまうんですけど JavaScriptの論理和演算子( || )がDiscordの機能で伏字にレンダリングされてしまっているので コードブロック(\```処理```)を使ってレンダリングしないようにしていただけると皆さんわかりやすいかと思います
p
そういうことか!
stationsList = [[0,1,2,3,4,5,6,7,8,9,10],[0,1,2,3,4,5,8,9,15,21],[0,1,2,3,4,5,15,21],[0,1,3,5,15,21]]; のようにリストinリストを作ってはどうでしょう
r
これは駅番号でこの数字の番号の時にtrueを返すというものです
c
||ブラインドされてて草||
p
それで、stationsList[syubethu]にstationが含まれるか判定します
r
これのやり方探してたので助かりました!ありがとうございます。
p
return stationsList[syubethu].indexOf(station) != -1;
r
[syubethu]の各番号の中に対応するかどうかのリストを入れ込むということですか?
p
このばあいshubethuが0の時の停車駅リストが一番目のリスト、1の時の停車駅リストが二番目のリスト…といった感じです。
0の時は各駅停車かなと思いすべての数字を入れています
r
なるほど
p
もうどこからどこまでの各駅…とかはいいので、とにかくすべての停車駅を羅列してください!
停車駅と通過駅が逆だったっぽいのですが、それはリストか判定の部分を逆にすれば大丈夫です。
c
stationListの中に種別ごとじゃなくて逆に駅目録に種別ごと書くのはどうかなと思った(どっちでもいいけど)
Copy code
javascript
var えきs = {
    //駅名: [各停, 急行]
    동두천:    [1, 1],
    보산:      [1, 0],
    동두천중앙: [1, 1],
    //省略
}
function とまるか(thisえき, しゅべつ){
    if(typeof えきs[thisえき] == "undefinded"){
        return true;
        //えきsにない駅の場合trueをreturn
        //この辺りうまくいじったらえきsにない場合各停以外return falseなど~~
    }
    return (えきs[thisえき][しゅべつ]);
}
Copy code
javascript
とまるか('보산', 0);
//true(1)
とまるか('보산', 1);
//false(0)
とまるか('국제금융센터.부산은행', 0);
//true(1)
r
ぎゃくも行けるんか
どのみちリスト化するなら駅全部書かなければならない感じなのは避けられないようで
p
こちらは駅ごとに、どの種別がtrueでfalseなのか羅列してる感じ
r
これリスト前に駅なり種別なりで制限かければ(stations >= 21とか)ある程度簡略化はできそう(?)
ちなみにこれ各駅区間は今書いてるやつでは特に判別する必要ないので省きたいなというのが本音だったり
p
先に上限下限みたいな部分で判定して、その後に精査するのはアリ
c
ちょっと修正した
r
thx
p
|どうでもいいけどPC28Kさんとアイコンと名前の感じ似てるんだよな|
r
どっちも手書き白アイコン()
c
窓内装snipping toolで描いた
p
metamoji classroomでかいた
r
ちなみにこれこの後どうしたいかってLEDに停車駅出す構文につなげたいんだけども、 Button6で上下かを判定して通過駅だった場合次の停車駅を出したい 駅名表出はnextSta
Copy code
if(checkStopthink === true){
nextSta = Stations
}
else if (checkStopthink === true){
if(Button6 = 1){//上り
nextSta = このさきわらかん
}
通過駅だった場合上りの場合は一番近い数字の大きい停車駅、下りの場合は逆っていうのを書きたいんだけどなんか方法思いついたりしませんか助けてください (処理イメージ) Stadata 1,2,3,4,5,6,7,8,9→全駅のデータ関数 shubetsu 1,3,5,6,9 → とある種別の時の停車駅リスト(これは上記の質問で書き方解決積み) stations 4 → 今入力された現位置データと仮定すると?(種別にはない停車駅) Button6 = 1 → 上下情報から一番近くのshubetsu駅を選択して送出したい(1の場合は上り) nextSta → 上りなので現種別で一番近い3を選択送出
これができれば地上子を5割削減できる
Copy code
function checkStopthink(StanumCG, syubethu) {
            var stopStations = {
                2: [0, 1, 2, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
                3: [0, 1, 2, 5, 9, 12, 13, 14, 18, 21],
                4: [0, 1, 2, 5, 9, 14, 18, 21],
                5: [0, 1, 2, 5, 9, 14, 18, 21],
                6: [0, 1, 2, 5, 9, 14, 18, 21],
                7: [0, 1, 2, 5, 14, 18, 21],
            };
            if (syubethu <= 1) {
                return true;
            }

            if(typeof stopStations[syubethu] == "undefined"){
                return true;
                //stopStationsにない駅の場合trueをreturn
                //この辺りうまくいじったらえきsにない場合各停以外return falseなど~~
            }
            return (stopStations[syubethu][StanumCG]);
        }

        if ((StanumCG >= 1 && StanumCG <= 21)) {
            var CGstations = StanumCG;
            if (checkStopthink(StanumCG, syubethu)) {
                var Stanext = CGstations;
            } 
            if (!checkStopthink(StanumCG, syubethu)) {
                if (ueshita == 1) { // 上り(最も近い小さい停車駅を探す)
                    while (StanumCG > 0) { // 0以下にならないようにする
                        StanumCG--;
                        if (checkStopthink(StanumCG, syubethu)) {
                            Stanext = StanumCG;
                            break;
                        }
                    }
                } else if (ueshita == 2) { // 下り(最も近い大きい停車駅を探す)
                    while (StanumCG < 21) { // 21を超えないようにする
                        StanumCG++;
                        if (checkStopthink(StanumCG, syubethu)) {
                            Stanext = StanumCG;
                            break;
                        }
                    }
                }
            }
        }
自己解決しました
chatGPT使って修正と調整重ねて通過駅の場合は停車駅になるまで方向に合わせてループ処理入れてます